package com.wanxin.wb.common.support;

/**
 * feiniu.com Inc.
 * Copyright (c) 2013-2014 All Rights Reserved.
 */



import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * <B>Description:</B> 服务编号支持类 (在接口调用时进行赋值)<br>
 * <B>Create on:</B> 2014年12月18日 下午5:23:21<br>
 *
 * @author 
 * @version 1.0
 */
public class ServiceNumberSupport {
    private static Logger logger = LoggerFactory.getLogger(ServiceNumberSupport.class);

    /**
     * 设置ServiceNumber时执行的回调函数
     */
    public static interface ServiceNumberCallback{
        /**
         * serviceNumber设置后执行
         * @param serviceNumber
         */
        void serviceNumberIsSet(String serviceNumber);
    }

    /**
     * 默认未知编号
     */
    protected static final String      UnKnownServiceNumber = "0000";
    private static ThreadLocal<String> serviceNumberCache   = new ThreadLocal<String>() {
                                                                @Override
                                                                protected String initialValue() {
                                                                    return UnKnownServiceNumber; //默认未知编号,表示未知错误
                                                                }

                                                                ;
                                                            };

    /**
     * 回调列表
     */
    private static List<ServiceNumberCallback> callbackList  = new ArrayList<>();

    /**
     * 注册回调
     * @param callback
     */
    public static void registerCallback(ServiceNumberCallback callback){
        if(callback!=null){
            callbackList.add(callback);
        }
    }

    /**
     * 删除注册的回调
     * @param callback
     */
    public static void unRegisterCallback(ServiceNumberCallback callback){
        if(callback!=null){
            callbackList.remove(callback);
        }
    }
    /**
     * 清空所有注册的回调
     */
    public static void unRegisterAllCallback(){
        callbackList.clear();
    }


    /**
     * <B>Description:</B> 设置服务编号 <br>
     * <B>Create on:</B> 2014年12月18日 下午5:41:44 <br>
     *
     * @param serviceNumber
     * @author 
     */
    public static void setServiceNumber(String serviceNumber) {
        if(serviceNumber ==null)serviceNumber = "";
        else serviceNumber = serviceNumber.trim();
        if(serviceNumber.isEmpty()){
            serviceNumber = UnKnownServiceNumber;
        }
        serviceNumberCache.set(serviceNumber);
        for(ServiceNumberCallback callback:callbackList){
            try {
                callback.serviceNumberIsSet(serviceNumber);
            }catch (Exception ex){
                logger.error("ServiceNum Callback Exec Error:"+ex.getMessage());
            }
        }
    }

    /**
     * <B>Description:</B> 获取当前服务编号 <br>
     * <B>Create on:</B> 2014年12月18日 下午5:41:53<br>
     *
     * @return
     * @author 
     */
    public static String getServiceNumber() {
        return serviceNumberCache.get();
    }
}
